// pages/mine/index.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    memberLevel: '普通会员',
    balance: '¥0.00',
    points: '0',
    isLoggedIn: false,
    userInfo: null,
    showcaseImage: 'cloud://cloudbase-1g29vs061fa4f865.636c-cloudbase-1g29vs061fa4f865-1370648540/image/static/promotion-banner.jpg'
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    this.checkLoginStatus()
    
    // 计算底部适配高度（适配tab-bar和安全区域）
    const systemInfo = wx.getSystemInfoSync()
    const tabBarHeight = 50 // 微信标准tabBar高度
    const bottomSafeArea = systemInfo.safeArea ? systemInfo.screenHeight - systemInfo.safeArea.bottom : 0
    const bottomOffset = tabBarHeight + bottomSafeArea
    
    this.setData({ 
      bottomSafeArea: bottomOffset
    })
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    if (typeof this.getTabBar === 'function' && this.getTabBar()) {
      this.getTabBar().setData({
        selected: 3
      })
    }
    // 检查登录状态，使用缓存机制减少云端调用
    this.checkLoginStatus()
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 检查登录状态并同步用户信息（带缓存优化）
   */
  async checkLoginStatus(forceRefresh = false) {
    const userInfo = wx.getStorageSync('userInfo')
    const isLoggedIn = wx.getStorageSync('isLoggedIn')
    
    if (isLoggedIn && userInfo && userInfo._openid) {
      try {
        // 检查缓存是否有效，除非强制刷新
        if (!forceRefresh && this.isCacheValid()) {
          const cachedUserInfo = this.getCachedUserInfo()
          if (cachedUserInfo) {
            console.log('使用缓存的用户信息')
            this.setDataWithLocalData(cachedUserInfo)
            return
          }
        }
        
        // 缓存无效或强制刷新，从云端同步
        console.log('从云端同步用户信息...')
        const cloudUserInfo = await this.syncUserInfoFromCloud(userInfo._openid)
        if (cloudUserInfo.success) {
          // 更新本地存储和缓存
          wx.setStorageSync('userInfo', cloudUserInfo.data)
          this.setCachedUserInfo(cloudUserInfo.data)
          
          this.setData({
            isLoggedIn: true,
            userInfo: cloudUserInfo.data,
            memberLevel: cloudUserInfo.data.memberLevelInfo?.name || '普通会员',
            balance: `¥${cloudUserInfo.data.balance?.toFixed(2) || '0.00'}`,
            points: cloudUserInfo.data.totalPoints?.toString() || '0'
          })
        }
      } catch (error) {
        console.error('同步用户信息失败:', error)
        const errorMessage = error.message || ''
        
        // 检查是否是用户不存在或被禁用的错误
        if (errorMessage.includes('用户不存在') || errorMessage.includes('用户已被禁用')) {
          // 这些错误已经在 syncUserInfoFromCloud 中处理了，这里不再重复处理
          console.log('用户状态异常已在前一步处理')
        } else {
          // 其他错误（如网络错误），使用本地数据
          this.setDataWithLocalData(userInfo)
        }
      }
    } else {
      // 未登录状态
      this.setData({
        isLoggedIn: false,
        userInfo: null,
        memberLevel: '---',
        balance: '---',
        points: '---'
      })
    }
  },

  /**
   * 获取缓存的用户信息
   */
  getCachedUserInfo() {
    const cachedData = wx.getStorageSync('cachedUserInfo')
    console.log('获取缓存数据:', cachedData)
    return cachedData ? cachedData.userInfo : null
  },

  /**
   * 设置缓存的用户信息
   */
  setCachedUserInfo(userInfo) {
    const cacheData = {
      userInfo: userInfo,
      timestamp: Date.now()
    }
    wx.setStorageSync('cachedUserInfo', cacheData)
  },

  /**
   * 检查缓存是否有效（10分钟）
   */
  isCacheValid() {
    const CACHE_DURATION = 10 * 60 * 1000 // 10分钟
    const cachedData = wx.getStorageSync('cachedUserInfo')
    
    if (!cachedData || !cachedData.timestamp) {
      return false
    }
    
    return Date.now() - cachedData.timestamp < CACHE_DURATION
  },

  /**
   * 使用本地数据设置页面状态
   */
  setDataWithLocalData(userInfo) {
    this.setData({
      isLoggedIn: true,
      userInfo: userInfo,
      memberLevel: userInfo.memberLevelInfo?.name || '普通会员',
      balance: `¥${userInfo.balance?.toFixed(2) || '0.00'}`,
      points: userInfo.totalPoints?.toString() || '0'
    })
  },

  /**
   * 从云端同步用户信息（增强版）
   */
  async syncUserInfoFromCloud(openid) {
    return new Promise((resolve, reject) => {
      if (!wx.cloud) {
        reject(new Error('云开发未初始化'))
        return
      }

      console.log('开始调用 getUserInfo 云函数...')

      wx.cloud.callFunction({
        name: 'getUserInfo',
        data: {},
        success: res => {
          console.log('云函数返回结果:', res)
          
          if (res.result && res.result.success) {
            console.log('用户信息获取成功:', res.result.data)
            resolve(res.result)
          } else {
            const errorMsg = res.result?.message || '获取用户信息失败'
            const errorCode = res.result?.error || 'UNKNOWN_ERROR'
            
            // 处理用户不存在或被禁用的情况
            if (errorCode === 'USER_NOT_FOUND' || errorCode === 'USER_DISABLED') {
              console.log('用户不存在或已被禁用，清除本地登录状态')
              
              // 清除本地存储的用户信息
              wx.removeStorageSync('userInfo')
              wx.removeStorageSync('isLoggedIn')
              wx.removeStorageSync('cachedUserInfo')
              
              // 更新页面状态为未登录
              this.setData({
                isLoggedIn: false,
                userInfo: null,
                memberLevel: '---',
                balance: '---',
                points: '---'
              })
              
              // 显示提示信息
              wx.showToast({
                title: errorMsg,
                icon: 'none',
                duration: 2000
              })
            }
            
            reject(new Error(errorMsg))
          }
        },
        fail: error => {
          console.error('云函数调用失败:', error)
          reject(new Error(`云函数调用失败: ${error.errMsg || error.message}`))
        }
      })
    })
  },

  /**
   * 检查登录状态并跳转
   */
  checkLoginAndNavigate(callback) {
    console.log('检查登录状态，isLoggedIn:', this.data.isLoggedIn)
    if (!this.data.isLoggedIn) {
      console.log('未登录，跳转到登录页面')
      wx.navigateTo({
        url: '/pages/login/index'
      })
      return false
    }
    console.log('已登录，执行回调函数')
    if (callback) callback()
    return true
  },

  /**
   * 登录/注册按钮点击 - 直接跳转到登录页面
   */
  onAuthTap() {
    if (this.data.isLoggedIn) {
      // 已登录，跳转到个人中心
      wx.navigateTo({
        url: '/pages/profile/index'
      })
    } else {
      // 未登录，直接跳转到登录页面
      wx.navigateTo({
        url: '/pages/login/index'
      })
    }
  },

  /**
   * 点击我的活动
   */
  onActivityTap() {
    this.checkLoginAndNavigate(() => {
      wx.navigateTo({
        url: '/pages/my_activity/index'
      })
    })
  },

  /**
   * 点击订单管理
   */
  onOrderTap() {
    this.checkLoginAndNavigate(() => {
      wx.navigateTo({
        url: '/pages/order_list/index'
      })
    })
  },

  /**
   * 点击购物车
   */
  onCartTap() {
    this.checkLoginAndNavigate(() => {
      wx.navigateTo({
        url: '/pages/cart/index'
      })
    })
  },

  /**
   * 点击投票中心
   */
  onVoteCenterTap() {
    // 投票中心不需要登录
    wx.navigateTo({
      url: '/pages/vote_center/index'
    })
  },

  /**
   * 点击全部订单
   */
  onAllOrdersTap() {
    this.checkLoginAndNavigate(() => {
      wx.navigateTo({
        url: '/pages/order_list/index'
      })
    })
  },

  /**
   * 点击待发货
   */
  onPendingShipmentTap() {
    this.checkLoginAndNavigate(() => {
      wx.navigateTo({
        url: '/pages/order_list/index?from=pending_shipment'
      })
    })
  },

  /**
   * 点击待收货
   */
  onPendingReceiptTap() {
    this.checkLoginAndNavigate(() => {
      wx.navigateTo({
        url: '/pages/order_list/index?from=pending_receipt'
      })
    })
  },

  /**
   * 点击待评价
   */
  onPendingReviewTap() {
    this.checkLoginAndNavigate(() => {
      wx.navigateTo({
        url: '/pages/order_list/index?from=pending_review'
      })
    })
  },

  /**
   * 点击会员信息显示区域 - 跳转到会员中心
   */
  onVipCenterTap() {
    this.checkLoginAndNavigate(() => {
      wx.navigateTo({
        url: '/pages/vip_center/index'
      })
    })
  },

  /**
   * 点击收藏
   */
  onFavoritesTap() {
    this.checkLoginAndNavigate(() => {
      wx.navigateTo({
        url: '/pages/my_collection/index'
      })
    })
  },

  /**
   * 点击充值
   */
  onRechargeTap() {
    this.checkLoginAndNavigate(() => {
      // TODO: 跳转到充值页面
      wx.showToast({
        title: '充值功能开发中',
        icon: 'none'
      })
    })
  },

  /**
   * 点击消息
   */
  onMessageTap() {
    this.checkLoginAndNavigate(() => {
      // TODO: 跳转到消息页面
      wx.showToast({
        title: '消息功能开发中',
        icon: 'none'
      })
    })
  },

  /**
   * 点击完善资料
   */
  onProfileTap() {
    console.log('完善资料按钮被点击，当前登录状态：', this.data.isLoggedIn)
    this.checkLoginAndNavigate(() => {
      console.log('已登录，跳转到完善资料页面')
      wx.navigateTo({
        url: '/pages/profile_edit/index'
      })
    })
  },

  /**
   * 点击设置
   */
  onSettingsTap() {
    console.log('设置按钮被点击')
    wx.navigateTo({
      url: '/pages/settings/index'
    })
  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  },

  /**
   * 静默登录 - 通过openid检查用户是否存在并直接登录
   */
  async silentLoginWithOpenId() {
    wx.showLoading({ title: '验证登录...' })
    
    try {
      // 1. 获取微信登录凭证
      const loginRes = await this.wxLogin()
      
      // 2. 调用云函数检查用户是否存在
      const checkResult = await this.checkCloudUser(loginRes.code)
      
      if (checkResult.success && checkResult.exists) {
        // 用户存在，直接登录
        const cloudResult = await this.cloudLogin(loginRes.code, { userInfo: {} })
        
        if (cloudResult.success) {
          // 保存用户信息到本地
          wx.setStorageSync('userInfo', cloudResult.data)
          wx.setStorageSync('isLoggedIn', true)
          
          // 执行完整数据刷新，确保用户信息完整
          await this.checkLoginStatus(true)
          
          // 静默完成，不显示提示
        } else {
          throw new Error(cloudResult?.message || '登录失败')
        }
      } else {
        // 用户不存在，跳转到登录页面
        wx.navigateTo({
          url: '/pages/login/index'
        })
      }
    } catch (error) {
      console.error('静默登录失败:', error)
      // 出错时跳转到登录页面
      wx.navigateTo({
        url: '/pages/login/index'
      })
    } finally {
      wx.hideLoading()
    }
  },

  /**
   * 微信登录获取code
   */
  wxLogin() {
    return new Promise((resolve, reject) => {
      wx.login({
        success: resolve,
        fail: reject
      })
    })
  },

  /**
   * 检查云端用户状态
   */
  async checkCloudUser(code) {
    return new Promise((resolve, reject) => {
      if (!wx.cloud) {
        reject(new Error('云开发未初始化'))
        return
      }

      console.log('调用云函数checkUser，参数:', { code })
      
      wx.cloud.callFunction({
        name: 'checkUser',
        data: { code },
        success: res => {
          console.log('checkUser云函数调用成功:', res)
          if (res.result) {
            resolve(res.result)
          } else {
            reject(new Error('云函数返回数据格式错误'))
          }
        },
        fail: error => {
          console.error('checkUser云函数调用失败:', error)
          reject(error)
        }
      })
    })
  },

  /**
   * 云函数登录
   */
  async cloudLogin(code, userProfile) {
    return new Promise((resolve, reject) => {
      if (!wx.cloud) {
        reject(new Error('云开发未初始化'))
        return
      }

      console.log('调用云函数login，参数:', { code, userInfo: userProfile.userInfo })
      
      wx.cloud.callFunction({
        name: 'login',
        data: {
          code: code,
          userInfo: userProfile.userInfo
        },
        success: res => {
          console.log('云函数调用成功:', res)
          if (res.result) {
            resolve(res.result)
          } else {
            reject(new Error('云函数返回数据格式错误'))
          }
        },
        fail: error => {
          console.error('云函数调用失败:', error)
          reject(error)
        }
      })
    })
  },

  /**
   * 图片点击预览
   */
  previewImage(e) {
    const current = e.currentTarget.dataset.src
    const urls = [current]
    
    wx.previewImage({
      current,
      urls
    })
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  async onPullDownRefresh() {
    try {
      // 强制刷新用户信息
      await this.checkLoginStatus(true)
      
      // 显示刷新成功提示
      wx.showToast({
        title: '刷新成功',
        icon: 'success',
        duration: 1000
      })
    } catch (error) {
      console.error('下拉刷新失败:', error)
      wx.showToast({
        title: '刷新失败',
        icon: 'none',
        duration: 1000
      })
    } finally {
      // 停止下拉刷新动画
      wx.stopPullDownRefresh()
    }
  }
})